草庐IT

c++ - QReadWriteLock递归

全部标签

java - 递归与内存

我有一个程序通过递归传递大量数据,比如1000个变量。递归将运行至少50或60次。我担心的是,是否有可能因为没有太多空间而在内存位置上覆盖数据,或者如果没有内存,我会得到一些异常,即程序内存已经用完了(我没有收到这样的错误)?是否有可能因为程序没有更多内存并且覆盖现有位置而得到错误的解决方案? 最佳答案 涉及两个存储区:stack和堆。堆栈是保存方法调用的当前状态(即局部变量和引用)的地方,堆是存储对象的地方。TheHotspotdocumentation说在Linux64位上,每个线程默认都有1024kB的堆栈。堆可以任意大,如今

Java 比 C 快

这个问题在这里已经有了答案:HowdoIwriteacorrectmicro-benchmarkinJava?(11个答案)关闭9年前。今天我做了一个简单的测试来比较java和c之间的速度-一个简单的循环,使整数“i”从0递增到20亿。我真的希望c语言比java更快。我对结果感到惊讶:java花费的时间(以秒为单位):大约。1.8秒c花费的时间(以秒为单位):大约。3.6秒。我根本不认为java是一种更快的语言,但我也不明白为什么在我的简单程序中循环比c快两倍?我是否在程序中犯了重大错误?还是MinGW的编译器配置不当之类的?publicclassJrand{publicstaticv

Java 相当于 register int?

在C中,我可以为一个变量分配一个寄存器,例如:registerinti=0;我知道Java是一种解释型语言,并且是远离CPU的许多抽象。是否有任何机制可用于甚至请求(如果体系结构不允许,那又怎样)我的变量保留在寄存器中而不是移动到缓存或主内存?我想没有任何办法,但我之前也有过惊喜。谢谢, 最佳答案 C中的register不会将变量放入寄存器。它只是给编译器提示,将其放入寄存器可能会很好。在Java中没有等价物。 关于Java相当于registerint?,我们在StackOverflow

java - 如何检测递归调用中的无限循环?

我有一个递归调用自身的函数,我想检测并终止是否进入无限循环,即再次被调用以解决相同的问题。最简单的方法是什么?编辑:这是一个函数,它将使用不同的x和y值递归调用。如果在递归调用中重复了对(x,y)的值,我想终止。intfromPos(int[]arr,intx,inty) 最佳答案 一种方法是将一个depth变量从一个调用传递到下一个调用,每次您的函数调用自身时递增它。检查depth不会增长到超过某个特定阈值。示例:intfromPos(int[]arr,intx,inty){returnfromPos(arr,x,y,0);}in

java - 对于 Java 和 C 编译器,代码的行为有何不同?

我有这段代码,我在Java和C上运行了它,但它们给了我两个不同的结果。是什么让它们以不同的方式运行。x=10;y=10;z=10;y-=x--;z-=--x;x-=--x-x--;X的值在Java中的输出是:8,对于C,它是6。这两个编译器对于递增选项的行为有何不同? 最佳答案 当您说这段代码被视为C程序的输出是6时,您是错误的。作为C程序,这是undefined.您的编译器只是碰巧得到6,但您也可能得到24、段错误或编译时错误。参见C99standard,6.5.2:在前一个和下一个序列点之间,一个对象应该有它的存储值最多通过表达

java - 理解基本递归

publicstaticvoidmain(String[]args){System.out.println(factorial(5));}publicintfactorial(intn){if(n我在此处直接写了上面的内容,所以可能无法编译,但我认为可以。任何人都可以简要地解释一下它是如何存储的吗?它从计算5*(5-1)开始,然后下降到4*(4-1),然后是3*(3-1).....直到它到达1,它只会返回1对吗?抱歉这么粗略,我只是想知道如何这完全有效谢谢但随着它的运行-它获取各个阶段的值5*(5-1)4*(4-1).........这些是如何存储然后检索回来的,还是我遗漏了什么?

java - (数组和字符串)Java 与 C 的区别

关闭。这个问题需要更多focused.它目前不接受答案。想改善这个问题吗?更新问题,使其仅关注一个问题editingthispost.5年前关闭。Improvethisquestion我了解C并且我正在进入Java并且对其处理数组和字符串的方法感到困惑。它与C中的数组和字符串完全不同。请帮助我理解C和Java之间的实际区别(对于字符串和数组)。 最佳答案 在CArraysC中的数组只是访问连续内存空间的语法糖,或者-在这里无耻地粗俗化-指针符号的变体。为了避免分配大块的连续内存并避免自己重新分配内存来操作可变大小的数据,然后您求助于

java - 如何在 JNI 中将事件/信号从 C 发送到 Java

是否有任何机制可以通过JNI从C向Java或反之亦然发送异步事件/信号?我需要捕捉从C到Java的信号/事件。 最佳答案 这听起来有点棘手,因为JNI应该只是单向的:Java代码可以调用本地方法,当然它可以回调到Java代码中,但它本身不能启动该过程。但这并非不可能,我认为最直接的解决方案是让native调用阻塞,直到收到信号。另一种选择是编写JVMTI代理,它可以主动干扰正在运行的VM。但是,如果我们谈论的是UNIX信号,那么您可以使用非公共(public)API(因此在未来和SunVM特定的情况下无法保证)但现有的sun.mis

java - 递归:如何尝试整数 1 到 9 的不同组合,以及(部分)反向序列以在出错时重新开始?

语言:Java目标:一般:解决数独游戏特定的:创建一个递归方法solve():检查数字是否与行、列或框中的其他数字冲突如果不是这种情况,则在给定的空白处填充[1-9]之间的整数,然后移至下一个空白处(部分或全部)如果空格不能被[1-9]之间的整数填充而不冲突,则反转进度。然后重试,直到所有空格都被填满(并且数独已解决)。问题:循环尝试填写整数n但总是会先尝试最小的数字。如果我要使用递归,整数将始终相同。问题:1.如何让代码填写1到9之间的数字,包括1到9。您如何使用递归来部分或完全清除进度并尝试不同的数字。(extra)到目前为止,我已经构建了部分解决数独问题的代码(直到无法填充空白方

javac中java自类型递归类型参数和继承错误

为什么这段代码不能编译?publicclassx{privatevoidtest(){handle(newThingA());handle(newModifiedThingA());}private,XextendsT>java.util.Listhandle(Xobject){returnobject.getList();}privatestaticclassBaseThing>{publicjava.util.ListgetList(){returnnull;}}privatestaticclassThingAextendsBaseThing{}privatestaticclass